#include <iostream>
#include <cstdio>
#include "ucontext.h"
#include "unistd.h"
// void func1(void *arg)
// {
//     puts("1");
//     puts("11");
//     puts("111");
//     puts("1111");
// }//此函数用来给makecontext使用
// void context_test()
// {
//     char stack[1024*128];//设置栈的空间
//     ucontext_t child,main;//设置两个上下文
//     getcontext(&child);//将此时的上下文信息保存到child中
//     child.uc_stack.ss_sp=stack;//指定栈空间
//     child.uc_stack.ss_size=sizeof(stack);//指定栈空间大小
//     child.uc_stack.ss_flags=0;
//     child.uc_link=&main;//设置后继上下文
//     makecontext(&child,(void(*)(void))func1,0);//修改上下文让其指向func1的函数
//     swapcontext(&main,&child);//切换到child上下文，保存当前上下文到main
//     puts("main");//如果设置了后继上下文也就是uc_link指向了其他ucontext_t的结构体对象则makecontext中的函数function
//                 //执行完成后会返回此处打印main，如果指向的为nullptr就直接结束
// }
// int main(){
//     context_test();
//     return 0;
// }
#include <stdio.h>
#include <ucontext.h>

void func1() {
    puts("In func1");
}

int main() {
    ucontext_t context;
    getcontext(&context);
    context.uc_stack.ss_sp = malloc(8192);
    context.uc_stack.ss_size = 8192;
    context.uc_link = NULL;
    makecontext(&context, func1, 0);
    setcontext(&context);
    puts("This will not be printed");
    puts("Hello World");
    return 0;
}
